余烬缀记

Logrotate 如何每小时轮转

edited on:

本文写于 Debian 12 (Bookworm) 环境下

logrotate 支持 hourly 关键字,因此配置方面不存在问题,只需要修改调用 logrotate 的程序,它通常是由 cron 调用的,但是在本文编写时所在的系统下它是由 systemctl 调用的,可以查看 /etc/cron.daily/logrotate 脚本文件,如果存在检测 system 然后退出的则表示它是由 systemctl 调用的

故此需要修改调用 logrotate 的程序的配置文件

使用 systemctl list-timers 列出所有定时器,找到 logrotate.timer ,在左侧 NEXT 一栏中可以发现得知它的下一次执行是在明天的凌晨

然后修改它的配置,timer 配置文件存放在 /lib/systemd/system/ 下,这个可由 systemctl cat logrotate.timer 输出的配置文件内容第一行的注释得知

修改 /lib/systemd/system/logrotate.timer 为如下内容

[Unit]
Description=Hourly rotation of log files
Documentation=man:logrotate(8) man:logrotate.conf(5)

[Timer]
OnCalendar=hourly
AccuracySec=1min
Persistent=true

[Install]
WantedBy=timers.target

然后重启 systemctl

sudo systemctl daemon-reload
sudo systemctl restart logrotate.timer

再次使用 systemctl list-timers 查看 logrotate.timer 的下一次执行时间,如果是下一小时的 0 分 0 秒则意外则正确

题外话:第一次知道 systemd 也有定时器